/**
 * 任意类型的异步函数
 */
export type AnyPromiseFunction = (...arg: any[]) => PromiseLike<any>;

/**
 * 任意类型的普通函数
 */
export type AnyNormalFunction = (...arg: any[]) => any;

/**
 * 任意类型的函数
 */
export type AnyFunction = AnyNormalFunction | AnyPromiseFunction;

export type Nullable<T> = T | null;

/**
 * 字符串类型对象
 */
export type Recordable<T = any> = Record<string, T>;

export type Mutable<T> = { -readonly [P in keyof T]: T[P] };
